﻿#include <iostream>

using namespace std;

static int process(const char* pStr, int size, int index)
{
    if (index >= size) return 1;
    if (pStr[index] == '0') return 0;

    int total = 0;
    switch (pStr[index])
    {
    case '1':
        total = process(pStr, size, index + 1);
        // 有可能和后面的一个字符结合成字母
        if (index + 1 < size)
        {
            total += process(pStr, size, index + 2);
        }
        break;

    case '2':
        total = process(pStr, size, index + 1);
        // 当后一个字符是'0'-'6'时，有可能和后面的一个字符结合成字母
        if (index + 1 < size && '0' <= pStr[index + 1] && pStr[index + 1] <= '6')
        {
            total += process(pStr, size, index + 2);
        }
        break;

    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':
        // 只能自己独立计算
        total = process(pStr, size, index + 1);
        break;
    }

    return total;
}

/**
  规定1和A对应、2和B对应、3和C对应...
  那么一个数字字符串比如"111", 就可以转化为"AAA"、"KA"和"AK"。
  给定一个只有数字字符组成的字符串str, 返回有多少种转化结果。
 */
int main_ConvertToLetterString()
{
    char text[0xff] = { 0 };
    sprintf_s(text, "%s", "26");
    int len = strlen(text);
    int total = process(text, len, 0);
    printf("%d", total);
    return 0;
}